
import { IsNotEmpty, IsString, IsOptional, IsInt, MaxLength, ArrayMinSize, IsArray, ValidateNested } from 'class-validator';
import { BaseRequestListDto } from './baseRequestList.dto';
import { Type } from 'class-transformer';
import { CreateFieldInfoDto } from './fieldInfo.dto';
import { CreateIndexInfoDto } from './indexInfo.dto';


export class CreateTableInfoDto {

    /**状态(0-禁用,1-正常)*/
    @IsOptional()
    status?: number;

    /**备注*/
    @IsOptional()
    comment?: string;

    /**表名称*/
    @IsNotEmpty({ message: '表名称不能为空' })
    name!: string;

    /**模板类型 */
    @IsOptional()
    templateType?:string;

    /**子表名称 */
    @IsOptional()
    subTable?:string;

    @IsArray({ message: '必须是数组' })
    // @ArrayMinSize(1, { message: 'list不能为空数组' })
    @ValidateNested({ each: true }) // 校验每个数组项
    @Type(() => CreateFieldInfoDto) // 必须配合class-transformer
    fieldInfoList?:CreateFieldInfoDto[]

    @IsArray({ message: '必须是数组' })
    // @ArrayMinSize(1, { message: 'list不能为空数组' })
    @ValidateNested({ each: true }) // 校验每个数组项
    @Type(() => CreateIndexInfoDto) // 必须配合class-transformer
    indexInfoList?:CreateIndexInfoDto[]

}

export class UpdateTableInfoDto {
    @IsNotEmpty({ message: 'id不能为空' })
    id!: number;

    /**模板类型 */
    @IsOptional()
    templateType?:string;

    /**子表名称 */
    @IsOptional()
    subTable?:string;   

    /**状态(0-禁用,1-正常)*/
    @IsOptional()
    status?: number;

    /**备注*/
    @IsOptional()
    comment?: string;

    /**表名称*/
    @IsOptional()
    name?: string;
    
    @IsArray({ message: '必须是数组' })
    // @ArrayMinSize(1, { message: 'list不能为空数组' })
    @ValidateNested({ each: true }) // 校验每个数组项
    @Type(() => CreateFieldInfoDto) // 必须配合class-transformer
    fieldInfoList?:CreateFieldInfoDto[]

    @IsArray({ message: '必须是数组' })
    // @ArrayMinSize(1, { message: 'list不能为空数组' })
    @ValidateNested({ each: true }) // 校验每个数组项
    @Type(() => CreateIndexInfoDto) // 必须配合class-transformer
    indexInfoList?:CreateIndexInfoDto[]



}

export class QueryTableInfoDto extends BaseRequestListDto {

    /**状态(0-禁用,1-正常)*/
    @IsOptional()
    status?: number;


    /**备注*/
    @IsOptional()
    comment?: string;


    /**表名称*/
    @IsOptional()
    name?: string;

}

export class DeleteTableInfoDto {
    @IsNotEmpty({ message: 'ID列表不能为空' })
    @IsInt({ each: true, message: '每个ID必须是整数' })
    ids!: number[];
}


export class SelectOneTableInfoDto {
    @IsNotEmpty({ message: 'ID不能为空' })
    id!: number;

    /**是否查询子表 */
    @IsOptional()
    queryChildren?:boolean = false;
}
export class CreateCodeTableInfoDto {
    @IsNotEmpty({ message: 'ID不能为空' })
    id!: number;

}


export class TableInfoResponseDto extends BaseRequestListDto {
    /**id*/
    @IsOptional()
    id?: number;

    /**创建时间*/
    @IsOptional()
    createdAt?: string;

    /**更新时间*/
    @IsOptional()
    updatedAt?: string;



    /**状态(0-禁用,1-正常)*/
    @IsOptional()
    status?: number;


    /**备注*/
    @IsOptional()
    comment?: string;


    /**表名称*/
    @IsOptional()
    name?: string;

    /**模板类型 */
    @IsOptional()
    templateType?: string;

    /**子表名称 */
    @IsOptional()
    subTable?: string;

}
